接下來終於進入最後的 category 部份啦,為了省略多餘步驟,migration 和 Model 會一起建立。
$ php artisan make:model Category -m
此處的 category 只需要一個 name 欄位就行
*YYYY_MM_DD_XXXXXX_create_categories_table.php
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->timestamps();
});
}
除此之外,由於 category 和 post 之間是屬於多對多的關係,因此我們還需要一個 pivot table,這個 pivot table 就不需要建立與其相關的 Model
$ php artisan make:migration create_category_post_table
此 pivot table 可以彙整多對多關聯的資料,欄位內填入 category 和 post 的 id,以及將其設為 foreign key。
public function up()
{
Schema::create('category_post', function (Blueprint $table) {
// $table->bigIncrements('id');
$table->unsignedBigInteger('category_id');
$table->unsignedBigInteger('post_id');
// $table->timestamps();
$table->foreign('category_id')->references('id')->on('categories');
$table->foreign('post_id')->references('id')->on('posts');
});
}
接下來就把這兩個 migration 進行 migrate
$ php artisan migrate
首先先來定義 Category 的 model:
mass assignment
在 Category 也只有 name 這個欄位可以填
*Category.php
protected $fillable = ['name'];
關聯性
Category 和 Post 之間為多對多的關係
*Category.php
public function posts(){
return $this->belongsToMany(Post::class);
}
*Post.php
public function categories(){
return $this->belongsToMany(Category::class)
}
<補充> hasMany() 用於一對多的關係,不應該用於多對多的情況
下一篇來介紹比較不一樣的主題。
參考資料: